package Views.Compra;

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.List;

import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.RowFilter;
import javax.swing.SwingConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.JScrollPane;

import Fisica.Ajuste.DAOAjuste;
import Fisica.Compra.DAOCompra;
import Fisica.Compra.DAOPedidoCompra;
import Fisica.Destino.DAODestino;
import Fisica.Movimiento.DAOMovimiento;
import Fisica.Retiro.DAORetiro;
import Fisica.Toner.DAOToner;
import Inteface.InterfaceGrilla;
import Inteface.InterfacePanel;
import Logica.Util;
import Modelo.Ajuste;
import Modelo.Compra;
import Modelo.Destino;
import Modelo.Movimiento;
import Modelo.Pedidocompra;
import Modelo.Retiro;
import Modelo.Toner;

import javax.swing.JTextField;

public class PedidoCompraGrilla extends JPanel implements InterfaceGrilla, InterfacePanel{
	private JTable table;

	public DefaultTableModel model;
	private TableRowSorter<TableModel> modeloOrdenado;
	/**Atributos de alinear tablas*/
	public DefaultTableCellRenderer alinearCentro;
	private JTextField tfFiltro;
	
	/**
	 * Create the panel.
	 */
	public PedidoCompraGrilla(int id) {
		setLayout(null);
		this.setVisible(true);
		JScrollPane scrollPane = new JScrollPane();
		
		scrollPane.setBounds(10, 11, 800, 338);
//		scrollPane.setBounds(10, 11, 580, 407);
		add(scrollPane);
		
		table = new JTable();
		scrollPane.setViewportView(table);
		
		tfFiltro = new JTextField();
		tfFiltro.setBounds(10, 398, 120, 20);
		add(tfFiltro);
		tfFiltro.setColumns(10);

		
		this.alinear(); //en el constructor de la clase.

		this.init(id);
		this.autoFiltro();
	}
	
	public void init(int id){
	  
	   model = new DefaultTableModel(
				new Object[][] {
						{null, null, null, null, null, null},
						{null, null, null, null, null, null},
						{null, null, null, null, null, null},
						{null, null, null, null, null, null},
					},
					new String[] {
						"ID", "Marca", "Modelo", "Cantidad", "Fecha", "Proveedor"
					}
				) {
					Class[] columnTypes = new Class[] {
						String.class, String.class, String.class, String.class, String.class, String.class
					};
					public Class getColumnClass(int columnIndex) {
						return columnTypes[columnIndex];
					}
				};		
				
		table.setModel(model);
//		table.getColumnModel().getColumn(0).setPreferredWidth(50);
//		table.getColumnModel().getColumn(0).setMaxWidth(50);
//		table.getColumnModel().getColumn(1).setMinWidth(70);
//		table.getColumnModel().getColumn(1).setMaxWidth(100);
//		table.getColumnModel().getColumn(2).setPreferredWidth(80);
//		table.getColumnModel().getColumn(2).setMinWidth(80);
//		table.getColumnModel().getColumn(2).setMaxWidth(100);
//		table.getColumnModel().getColumn(3).setPreferredWidth(50);
//		table.getColumnModel().getColumn(3).setMinWidth(50);
//		table.getColumnModel().getColumn(3).setMaxWidth(80);
//		table.getColumnModel().getColumn(4).setPreferredWidth(50);
//		table.getColumnModel().getColumn(4).setMinWidth(50);
//		table.getColumnModel().getColumn(4).setMaxWidth(100);
//		table.getColumnModel().getColumn(5).setPreferredWidth(50);
//		table.getColumnModel().getColumn(5).setMinWidth(50);
//		table.getColumnModel().getColumn(5).setMaxWidth(80);
		
		
		List<Object>list = null;
		DAOMovimiento dm = new DAOMovimiento();
		DAOToner dt = new DAOToner();
		DAOAjuste da = new DAOAjuste();
		DAOPedidoCompra dpc = new DAOPedidoCompra();
		DAOCompra dc = new DAOCompra();
		
		list = dpc.list();
		
		if(list.size()>0 ){
			model.setRowCount(0);
			Toner t;
			Pedidocompra pc;
			Compra c;	
			
			
			for (Object x : list) {
				pc = (Pedidocompra)x;
				c = (Compra) dc.getById(pc.getIdCompra());
				t = (Toner) dt.getById(pc.getIdToner());
				
//				"ID", "Marca", "Modelo", "Cantidad", "Fecha", "Proveedor"
				model.addRow(new Object[] {
						pc.getId(),
						t.getMarca(),
						t.getModelo(),
						pc.getCantidad(),
						Util.getDate(c.getFecha()),
						c.getProveedor()
						});
			}
		}
        
		table.getColumnModel().getColumn(0).setCellRenderer(alinearCentro);
		table.getColumnModel().getColumn(1).setCellRenderer(alinearCentro);
		table.getColumnModel().getColumn(2).setCellRenderer(alinearCentro);
		table.getColumnModel().getColumn(3).setCellRenderer(alinearCentro);
		table.getColumnModel().getColumn(4).setCellRenderer(alinearCentro);
		table.getColumnModel().getColumn(5).setCellRenderer(alinearCentro);
		
		
		if(list.size()>0 && id >= 0){
			table.setSelectionMode(id);
		}
		
	}

    
    private void filtrar(ActionEvent e) {
        //codigo de filtro
    	modeloOrdenado = new TableRowSorter(model);
        String fil = tfFiltro.getText().toUpperCase();
        //filtrar todas las filas que tengan el textro "fil"
        if (fil.length() != 0){
                modeloOrdenado.setRowFilter (RowFilter.regexFilter(".*"+fil+"*."));
        }else{
                modeloOrdenado.setRowFilter (RowFilter.regexFilter(""));                
        }
        table.setRowSorter (modeloOrdenado);       
    }
    
    private void autoFiltro(){
        tfFiltro.addKeyListener(new KeyListener() {			
			@Override
			public void keyTyped(KeyEvent arg0) {
				}
			
			@Override
			public void keyReleased(KeyEvent arg0) {
				filtrar(null);
			}
			
			@Override
			public void keyPressed(KeyEvent arg0) {
				}
		});
        }
    
	public int getRowSelected() {
		try {
			return table.getSelectedRow();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return -1;
	}

	public void guardar() {
//		DAOMovimiento dm = new DAOMovimiento();
//		DAOAjuste da = new DAOAjuste();
//		DAOToner dt = new DAOToner();
//		
//		int id, row = getRowSelected();
//		id = (int) table.getValueAt(row, 0);
//		Movimiento m = (Movimiento) dm.getById(id);		
//		Toner t = (Toner) dt.getById(m.getIdToner());	
//		Ajuste a = (Ajuste) da.getById(m.getIdAjuste());
////		"ID", "Marca", "Modelo", "Ajuste", "Efecto", "Cantidad"
//		m.setCantidad((int)table.getValueAt(id, 5));
//		
//		String ajuste = (String)table.getValueAt(id, 3);
//		m.setIdAjuste(((Ajuste)da.getByAjuste(ajuste)).getId());
//		
//		String marca, modelo;
//		marca = (String) table.getValueAt(id, 1);
//		modelo = (String) table.getValueAt(id, 2);		
//		m.setIdToner(((Toner)dt.getByMarcaModelo(marca, modelo)).getId());
//				
//		da.insert(a);
//		m.setIdAjuste(((Ajuste)da.getByAjuste(ajuste)).getId());
//		dm.insert(m);
	}

	public void cancelar() {
		this.init(-1);		
	}

	public Object primero() {
		DAOMovimiento dt = new DAOMovimiento();
		return (Movimiento) dt.getFirst();		
	}

	public Object ultimo() {
		DAOMovimiento dt = new DAOMovimiento();
		return (Movimiento) dt.getLast();
	}

	public Object anterior() {
		DAOMovimiento dt = new DAOMovimiento();
		int row = table.getSelectedRow();
		int id = Integer.parseInt((String) table.getValueAt(row -1, 0));
		return (Movimiento) dt.getPre(id);
	}

	public Object posterior() {
		DAOMovimiento dt = new DAOMovimiento();
		int row = table.getSelectedRow();
		int id = Integer.parseInt((String) table.getValueAt(row -1, 0));
		return (Movimiento) dt.getPost(id);
	}

	public boolean grilla() {
		return true;		
	}

	public boolean campos() {
		return false;		
	}

	@Override
	public int getPanel() {
		return 7;
	}

	@Override
	public void nuevo() {
		DAOMovimiento dt = new DAOMovimiento();
		int i = ((Movimiento) dt.getLast()).getId() +1;
		int col = model.getColumnCount();
		int row = model.getRowCount() -1;
		boolean tiene = false;
		for (int x = 1; x< col; x++) {
			Object campo = model.getValueAt(row, x);
			if((campo != null))
				tiene = true;
		}
		if(tiene)
			model.addRow(new Object[] {i, null, null, null, null, null});
		
	}
	
	

	

	/*Inicializo y cargo alineacinn de conlumnas en tablas*/
		public void alinear(){
			alinearCentro = new DefaultTableCellRenderer();					
			alinearCentro.setHorizontalAlignment(SwingConstants.CENTER);			
		}

		@Override
		public int setprimero() {
			table.setRowSelectionInterval( 0, 0 );
			return Integer.parseInt((String)table.getValueAt(0, 0));
		}

		@Override
		public int setultimo() {
			int rows = model.getRowCount();
			table.setRowSelectionInterval( rows-1, rows-1 );
			return Integer.parseInt((String)table.getValueAt(rows-1, 0));
		}

		@Override
		public int setanterior() {
			int row = table.getSelectedRow();
			if(row > 0)
				table.setRowSelectionInterval( row-1, row-1 );
			else return setprimero();
			return (row-1);
		}

		@Override
		public int setposterior() {
			int row = table.getSelectedRow();
			if(row >= (table.getRowCount()-1))
				return setultimo();
			else
				table.setRowSelectionInterval( row+1, row+1 );
			return Integer.parseInt((String)table.getValueAt(row+1, row+1));
		}
}
